from django_redis import get_redis_connection
from rest_framework import serializers

# serializers.ModelSerializer
# serializers.Serializer

class RegisterSmsCodeSerializer(serializers.Serializer):

    # 用户输入的图形验证码
    text=serializers.CharField(max_length=4,min_length=4,required=True,label='用户输入的图形验证码')
    # uuid
    image_code_id=serializers.UUIDField(required=True,label='uuid')


    """
    序列化器的验证分为4种方式：
        1.类型验证
        2.选项
        3.单个字段
        4.多个字段
    """

    def validate(self, attrs):

        #1. 获取用户输入的
        text = attrs.get('text')
        image_code_id=attrs.get('image_code_id')
        #2. 获取redis的
        redis_conn = get_redis_connection('code')

        redis_text = redis_conn.get('img_%s'%image_code_id)
        # redis的数据是有时效的
        if redis_text is None:
            raise serializers.ValidationError('图片验证码以过期')
            # 3. 比对
            #  redis的数据是 bytes类型
            # 用户在输入验证码的时候不会在意大小写
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('输入不一致')

        return attrs
